/**
 * 权限工具函数
 */
import { PAGE_PERMISSIONS, LIMIT_PAGE_MASK } from '@/types'

/**
 * 将页面权限码转换为权限字符串数组
 * @param pagePrivilegeCode 页面权限码
 * @returns 权限字符串数组
 */
export function convertPagePrivilegeToPermissions(pagePrivilegeCode: number | string): string[] {
  const permissions: string[] = []
  
  // 转换为数字类型
  const numericCode = typeof pagePrivilegeCode === 'string' ? parseInt(pagePrivilegeCode, 10) : pagePrivilegeCode
  
  // 如果权限码为-1，表示拥有所有页面权限
  if (numericCode === -1) {
    PAGE_PERMISSIONS.forEach(permission => {
      const pathParts = permission.path.split('/').filter(Boolean)
      if (pathParts.length >= 2) {
        const [module, page] = pathParts
        permissions.push(`${module}:${page}`)
      }
    })
    return permissions
  }
  
  PAGE_PERMISSIONS.forEach(permission => {
    if (permission.code && (numericCode & permission.code)) {
      // 根据路径生成权限字符串
      const pathParts = permission.path.split('/').filter(Boolean)
      if (pathParts.length >= 2) {
        const [module, page] = pathParts
        permissions.push(`${module}:${page}`)
      }
    }
  })
  
  return permissions
}

/**
 * 检查用户是否有指定页面的权限
 * @param pagePath 页面路径
 * @param userPagePrivilege 用户页面权限码
 * @returns 是否有权限
 */
export function hasPagePermission(pagePath: string, userPagePrivilege: number | string): boolean {
  // 转换为数字类型
  const numericPrivilege = typeof userPagePrivilege === 'string' ? parseInt(userPagePrivilege, 10) : userPagePrivilege
  
  // 如果权限码为-1，表示拥有所有页面权限
  if (numericPrivilege === -1) return true
  
  const permission = PAGE_PERMISSIONS.find(p => p.path === pagePath)
  // 如果页面不在权限配置中（如报警系统、用户管理等），默认允许访问
  if (!permission) return true
  
  return permission.code ? (numericPrivilege & permission.code) !== 0 : false
}

/**
 * 获取所有页面权限码
 * @returns 所有权限码的数组
 */
export function getAllPagePrivilegeCodes(): number[] {
  return PAGE_PERMISSIONS.map(p => p.code).filter((code): code is number => code !== undefined)
}

/**
 * 获取页面权限码对应的路径
 * @param code 权限码
 * @returns 页面路径
 */
export function getPagePathByCode(code: number): string | undefined {
  const permission = PAGE_PERMISSIONS.find(p => p.code === code)
  return permission?.path
}

/**
 * 获取用户第一个有权限的页面路径
 * @param userPagePrivilege 用户页面权限码
 * @returns 第一个有权限的页面路径，如果没有权限则返回默认页面
 */
export function getFirstAvailablePage(userPagePrivilege: number | string): string {
  // 转换为数字类型
  const numericPrivilege = typeof userPagePrivilege === 'string' ? parseInt(userPagePrivilege, 10) : userPagePrivilege
  
  // 如果权限码为-1，表示拥有所有页面权限，返回第一个页面
  if (numericPrivilege === -1) {
    return '/video/live'
  }
  
  // 按优先级顺序检查页面权限
  const pageOrder = [
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_PREVIEW, path: '/video/live' },      // 实时预览
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_MAP, path: '/video/map' },          // 电子地图
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_CAMERA_SET, path: '/video/camera' }, // 摄像机设置
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_VIDEO_REPLAY, path: '/video/playback' }, // 录像回放
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_ALARM, path: '/alarm' },            // 报警管理
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_USER, path: '/system/user' },        // 用户管理
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_ROLE, path: '/system/role' },       // 角色管理
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_NVR, path: '/device/stream' },       // 流媒体管理
    { code: LIMIT_PAGE_MASK.LIMIT_PAGE_MASK_NMC, path: '/device/nmc' }           // NMC管理
  ]
  
  // 查找第一个有权限的页面
  for (const page of pageOrder) {
    if (numericPrivilege & page.code) {
      return page.path
    }
  }
  
  // 如果没有任何页面权限，返回默认页面（报警系统或用户管理）
  return '/alarm'
}
